package controller

import (
	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
	"net/http"
)

// Controller example
type Controller struct {
}

// NewController example
func NewController() *Controller {
	return &Controller{}
}

// PingExample godoc
// @Summary ping example
// @Description do ping
// @Tags example
// @Accept json
// @Produce json
// @Success 200 {string} string "pong"
// @Failure 400 {string} string "ok"
// @Failure 404 {string} string "ok"
// @Failure 500 {string} string "ok"
// @Router /ping [get]
func (c *Controller) PingExample(ctx *gin.Context) {
	ctx.String(http.StatusOK, "pong")
	return
}

// @Summary ping example
// @Description do ping
// @Tags example
// @Accept json
// @Produce json
// @Success 200 {string} string "pong"
// @Failure 400 {string} string "ok"
// @Failure 404 {string} string "ok"
// @Failure 500 {string} string "ok"
// @Router / [get]
func IndexHandler(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"version": viper.GetString("app.ver"),
		"value":   111,
	})
}

func NeedLoginHandler(c *gin.Context) {
	// 因为之前的 JWT 中间件中在 上下文c 中保存了 当前登录的 UserSn
	// 在这个函数中就可以通过 上下文c 获取当前挡路的用户
	v, ok := c.Get(ContextUserIDKey)
	if !ok {
		// 没有取到 UserSn --> /login
		ResponseError(c, CodeNotLogin)
		return
	}
	userSn := v.(uint64) // 因为c中取出来的值是空接口类型，需要做类型断言
	ResponseSuccess(c, userSn)
}
